home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / basic / pbtool.exe / READDBF.BAS < prev    next >
BASIC Source File  |  1991-11-15  |  4KB  |  108 lines

  1. '----------------------------------------------------------
  2. '  PROGRAM: READDBF.BAS        PROGRAMMER: A. KELLETT
  3. '  DATE-WRITTEN: 11/14/91
  4. '  USING POWER BASIC V2.10A (NOT FOR TURBO BASIC)
  5. '
  6. '  THIS PROGRAM READS THE CONTENTS OF A dBASE (TM) .DBF
  7. '  (THE DATA) FILE.  DOES NOT LOOK AT INDEX (.NDX) FILES.
  8. '  VERSION: 0.00    LAST UPDATED: 00/00/00
  9. '----------------------------------------------------------
  10. CLS
  11. FILE1EOF& = 0
  12. INPUT "ENTER dBASE FILE NAME: ";FILENAME1$
  13. GOSUB FILEEXISTS
  14. MAP HEADER$$ * 32, 1 AS VERSION$$, 1 AS YEAR$$, 1 AS MONTH$$, 1 AS DAY$$,_
  15.    4 AS TOT.RECORDS$$, 2 AS HEADER.SIZE$$, 2 AS RECORD.LENGTH$$,_
  16.    20 AS FILLER$$
  17. MAP FIELDHEADER$$ * 32, 10 AS FIELD.NAME$$, 1 AS FILLER1$$, _
  18.    1 AS FIELD.TYPE$$, 4 AS FILLER2$$, 1 AS FIELD.WIDTH$$,_
  19.    1 AS DECIMALS$$, 14 AS FILLER3$$
  20. MAP FDATA$$ * 19, 10 AS FIELDNAME$$, 2 AS FIL1$$, 1 AS FTYPE$$,_
  21.    2 AS FIL2$$, 1 AS FWIDTH$$, 2 AS FIL3$$, 1 AS FDECIMAL$$
  22.  
  23. OPEN FILENAME1$ FOR BINARY AS #1
  24.    GET$ 1, 32, HEADER$$
  25.  
  26.    X1 = ASC(LEFT$(TOT.RECORDS$$,1)):X2 = ASC(MID$(TOT.RECORDS$$,2,1))
  27.    X3 = ASC(MID$(TOT.RECORDS$$,3,1)):X4 = ASC(RIGHT$(TOT.RECORDS$$,1))
  28.    TOT.RECORDS& = X1 + (256 * X2) + (4096 * X3) + (65536 * X4)
  29.    HEADER.SIZE& = ASC(LEFT$(HEADER.SIZE$$,1))_
  30.       + (256 * ASC(RIGHT$(HEADER.SIZE$$,1)))
  31.    RECORD.LENGTH& = ASC(LEFT$(RECORD.LENGTH$$,1))_
  32.       + (256 * ASC(RIGHT$(RECORD.LENGTH$$,1)))
  33.    NUM.FIELDS& = ((HEADER.SIZE& - 1) \ 32) - 1
  34.  
  35.    LOCATE 2,5:PRINT "dBASE VERSION: ";ASC(VERSION$$)
  36.    LOCATE 3,5:PRINT "MODIFIED   YR: ";ASC(YEAR$$)
  37.    LOCATE 4,5:PRINT "           MM: ";ASC(MONTH$$)
  38.    LOCATE 5,5:PRINT "           DD: ";ASC(DAY$$)
  39.    LOCATE 6,5:PRINT "TOT RECORDS  : ";TOT.RECORDS&
  40.    LOCATE 7,5:PRINT "HEADER SIZE  : ";HEADER.SIZE&
  41.    LOCATE 8,5:PRINT "RECORD LENGTH: ";RECORD.LENGTH&
  42.    LOCATE 9,5:PRINT "NUMBER FIELDS: ";NUM.FIELDS&
  43.  
  44.    DIM FIELD.DATA$(1:NUM.FIELDS&)
  45.    FOR I% = 1 TO NUM.FIELDS&
  46.       GET$ 1, 32, FIELDHEADER$$
  47.  
  48.       FIELD.WIDTH% = ASC(FIELD.WIDTH$$)
  49.       FIELD.WIDTH$ = USING$("##", FIELD.WIDTH%)
  50.       IF DECIMALS$$ = CHR$(0) THEN
  51.      DECIMALS% = 0:FDECIMAL$$ = "0"
  52.       ELSE
  53.      DECIMALS% = ASC(DECIMALS$$):FDECIMAL$$ = DECIMAL$$
  54.       END IF
  55.       LOCATE 10,1:PRINT "FIELD NAME  : ";FIELD.NAME$$
  56.       LOCATE 11,1:PRINT "FIELD TYPE  : ";FIELD.TYPE$$
  57.       LOCATE 12,1:PRINT "FIELD WIDTH : ";FIELD.WIDTH%
  58.       LOCATE 13,1:PRINT "DECIMALS    : ";DECIMALS%
  59.  
  60.       FIELD.DATA$(I%) = FIELD.NAME$$ + "  " + FIELD.TYPE$$ +_
  61.          "  " + FIELD.WIDTH$ + "  " + FDECIMAL$$
  62.    NEXT I%
  63.    DELAY 3
  64.  
  65.    FOR I% = 1 TO TOT.RECORDS&
  66.       GET$ 1, 1, DELFLAG$
  67.       GET$ 1, RECORD.LENGTH&, RECORD1$
  68.       CLS
  69.       LOCATE 4,20:PRINT USING "RECORD NUM ##,###";I%
  70.       LOCATE 5,1:PRINT RECORD1$
  71.       DELAY 1
  72.    NEXT I%
  73.    LOCATE 23,1
  74. CLOSE #1
  75.  
  76. END
  77. '
  78. '
  79. '----------------------------------------------------------
  80. FILEEXISTS:
  81.    OPEN FILENAME1$ FOR BINARY AS #1
  82.       IF LOF(1) < 1 THEN       '** FILE LENGTH LESS THAN 0 **
  83.          LOCATE 15,5
  84.          PRINT "THE INPUT FILE DOES NOT EXISTS."
  85.          CLOSE #1              '** CLOSE THE NON-EXISTANT FILE **
  86.          KILL FILENAME1$       '** DELETE 0 LENGTH FILE WE'VE CREATED **
  87.          DELAY 2.5             '** PAUSE FOR USER TO READ MESSAGE **
  88.          LOCATE 22,1
  89.          END                   '** END PROCESSING HERE **
  90.       END IF
  91.    CLOSE #1                    '** CLOSE IN CASE IT DID EXIST **
  92.  
  93. RETURN
  94. '----------------------------------------------------------
  95. '   Information on the structure of dBASE .DBF files were
  96. '         obtained from the following two sources:
  97. '
  98. '   dBASE III Plus Programmer's Reference Guide  pp.859 - 875
  99. '   by Alan Simpson ( 1987 SYBEX Inc.)  No dBASE programmer
  100. '   should ever be more than arms-length away from this book.
  101. '
  102. '   BASIC Techniques and Utilities p. 251  by Ethan Winer
  103. '   ( 1991 Ziff-Davis Press ).  Never thought about reading dBASE
  104. '   files from Turbo/PowerBasic until I stumbled over his
  105. '   easy-to-understand chapter.  Did not use his code as a model.
  106. '
  107. '
  108.